interface IA { }  //父类接口A (A系列)
interface IB { }  //父类接口B (B系列)

class Product1A : IA { }  //子类工厂1生产的A系列产品子类
class Product2A : IA { }  //子类工厂2生产的A系列产品子类
class Product1B : IB { }  //子类工厂1生产的B系列产品子类
class Product2B : IB { }  //子类工厂2生产的B系列产品子类

abstract class AbstractFactory {  // 抽象工厂
	public static AbstractFactory ChooseFactory(int factoryName) {  //根据用户参数选择子类工厂
		switch (factoryName) {
			case 1: return new Factory1();
			case 2: return new Factory2();
			default: return null;
		}
	}
	public abstract IA GetProductA();  //获取A系列产品
	public abstract IB GetProductB();  //获取B系列产品
}
class Factory1 : AbstractFactory {  //子类工厂1
	public override IA GetProductA() { return new Product1A(); }  //生产A系列产品
	public override IB GetProductB() { return new Product1B(); }  //生产B系列产品
}
class Factory2 : AbstractFactory {  //子类工厂2
	public override IA GetProductA() { return new Product2A(); }  //生产A系列产品
	public override IB GetProductB() { return new Product2B(); }  //生产B系列产品
}
